home *** CD-ROM | disk | FTP | other *** search
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
-
- #define FOG_DISABLE
- #include "fog.fx"
-
- shared float3 OrientableParticlePosition[4] =
- {
- {-0.5f,0.5f,0.0f},
- {0.5f,0.5f,0.0f},
- {0.5f,-0.5f,0.0f},
- {-0.5f,-0.5f,0.0f}
- };
-
- //------------------------------------------------------------------------------------------------------
-
- shared float2 OrientableParticleUv[4] =
- {
- {0.0f,0.0f},
- {1.0f,0.0f},
- {1.0f,1.0f},
- {0.0f,1.0f}
- };
-
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
-
- struct CVertexShaderInput
- {
- float4 ParticleMatrix_O : POSITION;
- float IndexVertexParticle : PSIZE;
- float4 ParticleColor : COLOR0;
- float3 ParticleMatrix_I : TEXCOORD0;
- float3 ParticleMatrix_J : TEXCOORD1;
- float3 ParticleMatrix_K : TEXCOORD2;
- };
-
- //------------------------------------------------------------------------------------------------------
-
- struct CVertexShaderOutput
- {
- float4 Position : POSITION;
- float4 ParticleColor : COLOR0;
- float2 ParticleUv : TEXCOORD0;
- FOG_OPTION_VERTEX_FIELD
- };
-
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
-
- CVertexShaderOutput OrientableParticleVSProcess (const CVertexShaderInput input);
-
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
-
- CVertexShaderOutput OrientableParticleVSProcess (const CVertexShaderInput input)
- {
- CVertexShaderOutput output;
-
- matrix particleMatrix;
- float4 particleCameraTranslation;
-
- particleMatrix[0].xyz = input.ParticleMatrix_I.xyz;
- particleMatrix[1].xyz = input.ParticleMatrix_J.xyz;
- particleMatrix[2].xyz = input.ParticleMatrix_K.xyz;
- particleMatrix[3].xyz = input.ParticleMatrix_O.xyz;
- particleMatrix[0].w = 0.0f;
- particleMatrix[1].w = 0.0f;
- particleMatrix[2].w = 0.0f;
- particleMatrix[3].w = 1.0f;
-
- float3 scale;
- scale.x = length(particleMatrix[0]);
- scale.y = length(particleMatrix[1]);
- scale.z = length(particleMatrix[2]);
-
- particleMatrix[0].xyz /= scale.x;
- particleMatrix[1].xyz /= scale.y;
- particleMatrix[2].xyz /= scale.z;
-
- particleCameraTranslation = mul(particleMatrix[3],InverseCamera);
-
- particleMatrix = mul (particleMatrix,OrientedViewMatrix);
-
- particleMatrix[3] = particleCameraTranslation;
-
- float4 cameraParticlePosition;
- cameraParticlePosition.xyz = OrientableParticlePosition[input.IndexVertexParticle];
- cameraParticlePosition.w = 1.0f;
-
- particleMatrix[0].xyz *= scale.x;
- particleMatrix[1].xyz *= scale.y;
- particleMatrix[2].xyz *= scale.z;
-
- cameraParticlePosition = mul (cameraParticlePosition,particleMatrix);
- cameraParticlePosition.z = - cameraParticlePosition.z;
-
- output.Position = mul (cameraParticlePosition,Projection);
- output.ParticleUv = OrientableParticleUv[input.IndexVertexParticle];
- output.ParticleColor = input.ParticleColor;
-
- // fog computation
- FOG_OPTION_COMPUTE(output, output.Position);
-
- return output;
- }
-
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------
- //------------------------------------------------------------------------------------------------------